#include <iostream>
#include <string>
#include <vector>
#include <memory>
#include <chrono>
#include "Smart.hpp"



//c++类型转换
// void testchange()
// {
// 	// double x = 10.10001;
// 	// cout << x << endl;
// 	// int y = static_cast<int>(x);
// 	// cout << y << endl;
// 	// //int *p = &y;
// 	// int z = reinterpret_cast<int>(p);
// 	// cout << z << endl;
// 	// int a = 10;
// 	// int* p = &a;
// 	// double address = reinterpret_cast<double>(p);
// 	// cout << address << endl;
// }


// int mainsssssssss()
// {
// 	int a = 10;
// 	int* p = &a;
// 	int address = reinterpret_cast<int>(p);
// 	cout << address << endl;
// 	return 0;
// }

// int main()
// {
// 	testchange();
// 	int a = mainsssssssss();
// 	return 0;
// }

// typedef void(*FUNC)();
// int DoSomething(int i)
// {
// 	cout << "DoSomething: " << i << endl;
// 	return 0;
// }
// int main()
// {
// 	FUNC f = reinterpret_cast<FUNC>(DoSomething);
// 	f();
// 	return 0;
// }

// int add(int a,int b)
// {
// 	return a + b;
// }
// int main()
// {
// 	// unique_ptr<int> a(new int(1));
// 	// *a = 100;
// 	// cout << *a << endl;

// 	// shared_ptr<int> b(new int(1));
// 	// cout << *b << endl;
// 	// shared_ptr<double> arr(new double());
// 	// shared_ptr<string> x = make_shared("stringgg");
// 	// Auto_ptr<int> a(new int(12));
// 	// cout << *a << endl;
// 	// Unique_ptr<int> b(new int(11));
// 	// cout << *b << " ";
// 	// cout << (&b) << endl;

// 	// Shared_ptr<int> a(new int(10000));
// 	// cout << *a << endl;
// 	// Shared_ptr<int> b(a);
// 	// cout << *b << endl;
// 	// Shared_ptr<int> c(new int());
// 	// c = b;
// 	// cout << *c << endl;
// 	//Shared_ptr<vector<int>> a(new vector<int>());
// 	//a->push_back(1);
// 	// a->push_back(1);
// 	// a->push_back(1);
// 	// a->push_back(1);
// 	// a->push_back(1);
// 	// a->push_back(1);
// 	// a->push_back(1);
// 	// a->push_back(1);
// 	// a->push_back(1);
// 	// for (int i= 0; i < a->size(); i++)
// 	// {
// 	// 	cout << (*a)[i] << endl;
// 	// }

// 	// int* a = new int[10]();
// 	// delete[] a;

// 	// Shared_ptr<int> a(new int(1));
// 	// cout << *(a.get()) << endl;
// 	// Weak_ptr<int> b(a);
// 	// cout << *b << endl;
// 	//左值引用
// 	//右值引用
// 	int a = 10;
// 	int &b = a;
// 	10;
// 	20;
// 	int &&c = 100;
// 	const int& d = 100;
// 	int &&e = move(a);
// 	int *ptr1 = &b;
// 	int *ptr2 = &e;

// 	cout << *ptr1 << endl;
// 	cout << *ptr2 << endl;

// 	function<int(int, int)> x = add;
// 	//d = x(1, 2);
// 	cout << x(1,2) << endl;
// 	return 0;
// }




string add(const string& x, const string& y)
{
	string z;
	z += x;
	z += y;
	return move(z);
}

int main()
{
	auto now1 = chrono::system_clock::now();
	// for (int i = 0; i < 100000000; i++)
	// {	
	// 	string z = add("hel", "lo");
	// 	//cout << z << endl;
	// }
	auto now2 = chrono::system_clock::now();
	// cout << (now2 - now1).count() << endl;
	// auto x = chrono::hours(1);
	// auto y = chrono::minutes(2);
	// auto z = chrono::seconds(3);

	//cout << x << endl;
	//cout << typeid(x).name() << endl;
	return 0;
}